package org.mendoza.salud.hvt.ui.cruds;

import com.vaadin.cdi.CDIView;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.data.util.converter.StringToLongConverter;
import com.vaadin.data.validator.RegexpValidator;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.*;
import org.mendoza.salud.hvt.model.global.Documento;
import org.mendoza.salud.hvt.model.global.Persona;
import org.mendoza.salud.hvt.model.global.TipoDeDocumento;
import org.mendoza.salud.hvt.services.global.PersonaServiceBean;

import javax.ejb.EJB;

/**
 * Created by administrador on 27/03/15.
 */
@CDIView("PersonaEdit")
public class PersonaEdit extends CustomComponent implements View {

    @EJB
    PersonaServiceBean personaServiceBean;

    @Override
    public void enter(ViewChangeListener.ViewChangeEvent viewChangeEvent) {
        VerticalLayout layout = new VerticalLayout();
        setCompositionRoot(layout);

        BeanItemContainer<TipoDeDocumento> containerTipoDeDocumento = new BeanItemContainer<TipoDeDocumento>(TipoDeDocumento.class);
        containerTipoDeDocumento.addAll(personaServiceBean.getAllTipoDeDocumento());

        BeanItemContainer<Persona.Sexo> containerSexo = new BeanItemContainer<Persona.Sexo>(Persona.Sexo.class);
        containerSexo.addBean(Persona.Sexo.FEMENINO);
        containerSexo.addBean(Persona.Sexo.MASCULINO);
        containerSexo.addBean(Persona.Sexo.INDEFINIDO);


        final BeanItem<Persona> beanItemPersona = new BeanItem<Persona>(new Persona());

        final TextField textFieldNombres = new TextField("Nombres", beanItemPersona.getItemProperty("nombres"));
        final TextField textFieldApellidos = new TextField("Apellidos", beanItemPersona.getItemProperty("apellidos"));
        final DateField dateFieldFechaNacimiento = new DateField("Fecha de Nacimiento", beanItemPersona.getItemProperty("fechaDeNacimiento"));

        final ComboBox comboBoxTDD = new ComboBox("Tipo de Documento", containerTipoDeDocumento);
        comboBoxTDD.setFilteringMode(FilteringMode.CONTAINS);

        final TextField textFieldNumeroDeDocumento = new TextField("Numero de Documento");
        textFieldNumeroDeDocumento.setConverter(StringToLongConverter.class);
        textFieldNumeroDeDocumento.addValidator(new RegexpValidator("No es un numero: {0}", "^\\d+$"));

        textFieldNumeroDeDocumento.setValidationVisible(true);

        final ComboBox comboBoxSexo = new ComboBox("Sexo", containerSexo);
        comboBoxSexo.setFilteringMode(FilteringMode.STARTSWITH);

        final Button buttonOk = new Button("Guardar");

        buttonOk.addClickListener(new Button.ClickListener() {
            @Override
            public void buttonClick(Button.ClickEvent clickEvent) {
                Documento documento = new Documento();
                documento.setTipoDeDocumento((TipoDeDocumento) comboBoxTDD.getValue());
                documento.setNumero((Long) textFieldNumeroDeDocumento.getConvertedValue());
                beanItemPersona.getBean().setDocumento(documento);
                beanItemPersona.getBean().setSexo((Persona.Sexo) comboBoxSexo.getValue());
                personaServiceBean.persistPersona(beanItemPersona.getBean());
            }
        });

        layout.addComponent(textFieldNombres);
        layout.addComponent(textFieldApellidos);
        layout.addComponent(dateFieldFechaNacimiento);
        layout.addComponent(textFieldNumeroDeDocumento);
        layout.addComponent(comboBoxTDD);
        layout.addComponent(comboBoxSexo);
        layout.addComponent(buttonOk);
    }
}
